#include <gpumonitorfactory.h>
#include <nvidiagpumonitor.h>
#include <amdgpumonitor.h>
#include <intelgpumonitor.h>
#include <mttgpumonitor.h>
#include <memory>

std::shared_ptr<GpuMonitorInterface> GpuMonitorFactory::createGpuMonitor(GPUVendor &gpuvendor)
{
    switch (gpuvendor) {  
        case GPUVendor::NV:  
            return std::make_shared<NVGpuMonitor>();  
        case GPUVendor::AMD:  
            return std::make_shared<AMDGpuMonitor>();  
        case GPUVendor::Intel:  
            return std::make_shared<IntelGpuMonitor>();
        case GPUVendor::MTT:
            return std::make_shared<MTTGpuMonitor>();
        default:  
            throw std::invalid_argument("Unsupported GPU vendor");  
    }
}
